<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录界面</title>
    <link href="http://localhost:8080/static/layui/css/layui.css" rel="stylesheet">
    <script src="http://localhost:8080/static/layui/js/jquery-3.6.3.js"></script>
    <style>
        #canvas {
            float: right;
            display: inline-block;
            cursor: pointer;
        }
    </style>
</head>
<body>
<div id="top" style="width: 400px;height: 400px; margin-left: 35%;margin-top: 100px;">
    <form class="layui-form" action="javascript:void(0);">
        <div class="layui-form-item">
            <label class="layui-form-label">登录用户名</label>
            <div class="layui-input-block">
                <input type="text" name="loginName" lay-verify="title" value="admin" autocomplete="off"
                       class="layui-input" style="width: 300px;">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">密码</label>
            <div class="layui-input-block">
                <input type="password" name="password" lay-verify="required" value="123456"
                       autocomplete="off" class="layui-input" style="width: 300px;">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">验证码</label>
            <div class="layui-input-inline" style="width: 150px;">
                <input type="text" name="captcha" id="captcha" placeholder="请输入验证码" autocomplete="off"
                       class="layui-input admin-input admin-input-verify"
                       value="" style="width: 150px;">
            </div>
            <div class="layui-form-mid" style="padding: 0!important;">
                <canvas id="canvas" width="100" height="43" class="admin-captcha"></canvas>
            </div>
        </div>


        <div class="layui-form-item">
            <div class="layui-input-block">
                <button type="submit" class="layui-btn" lay-submit="" lay-filter="demo1">立即提交</button>
                <button type="reset" class="layui-btn layui-btn-primary">重置</button>
            </div>
        </div>
    </form>
</div>

</body>

<script src="http://localhost:8080/static/layui/layui.js"></script>

<script>

    $(function () {
        //获取验证码
        let show_num = [];
        draw(show_num);

        //刷新验证码
        $("#canvas").on('click', function () {
            draw(show_num);
        })

        layui.use(['form', 'util', 'laydate'], function () {
            var form = layui.form;

            //提交事件
            form.on('submit(demo1)', function (data) {
                let val = $("#captcha").val();
                let num = show_num.join("");
                if (val == '') {
                    alert('请输入验证码！');
                } else if (val == num) {
                    alert('提交成功！');
                    $(".input-val").val('');
                    draw(show_num);
                    $.ajax({
                        url: "http://localhost:8080/system/validateLogon.do",
                        data: data.field,
                        success: function (res) {
                            //console.log(res);
                            window.location.href = res;
                        },
                        error: function () {
                            console.log("err...");
                        }
                    });
                } else {
                    alert('验证码错误！请重新输入！');
                    $(".input-val").val('');
                    draw(show_num);
                }
            });
        });
    })

    //验证码的样式
    function draw(show_num) {
        var canvas_width = $('#canvas').width();
        var canvas_height = $('#canvas').height();
        var canvas = document.getElementById("canvas");//获取到canvas的对象，演员
        var context = canvas.getContext("2d");//获取到canvas画图的环境，演员表演的舞台
        canvas.width = canvas_width;
        canvas.height = canvas_height;
        var sCode = "A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0";
        var aCode = sCode.split(",");
        var aLength = aCode.length;//获取到数组的长度

        for (var i = 0; i <= 3; i++) {
            var j = Math.floor(Math.random() * aLength);//获取到随机的索引值
            var deg = Math.random() * 30 * Math.PI / 180;//产生0~30之间的随机弧度
            var txt = aCode[j];//得到随机的一个内容
            show_num[i] = txt.toLowerCase();
            var x = 10 + i * 20;//文字在canvas上的x坐标
            var y = 20 + Math.random() * 8;//文字在canvas上的y坐标
            context.font = "bold 23px 微软雅黑";

            context.translate(x, y);
            context.rotate(deg);

            context.fillStyle = randomColor();
            context.fillText(txt, 0, 0);

            context.rotate(-deg);
            context.translate(-x, -y);
        }
        for (var i = 0; i <= 5; i++) { //验证码上显示线条
            context.strokeStyle = randomColor();
            context.beginPath();
            context.moveTo(Math.random() * canvas_width, Math.random() * canvas_height);
            context.lineTo(Math.random() * canvas_width, Math.random() * canvas_height);
            context.stroke();
        }
        for (var i = 0; i <= 30; i++) { //验证码上显示小点
            context.strokeStyle = randomColor();
            context.beginPath();
            var x = Math.random() * canvas_width;
            var y = Math.random() * canvas_height;
            context.moveTo(x, y);
            context.lineTo(x + 1, y + 1);
            context.stroke();
        }
    }

    function randomColor() {//得到随机的颜色值
        var r = Math.floor(Math.random() * 256);
        var g = Math.floor(Math.random() * 256);
        var b = Math.floor(Math.random() * 256);
        return "rgb(" + r + "," + g + "," + b + ")";
    }

</script>
</html>